package com.benshou.bcss.common.db.mybatisplus.typehandler;

import lombok.NonNull;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.type.TypeHandlerRegistry;

/**
 * TypeHandler 注册器
 *
 * @author <a href="mailto:liuzhenbang@benshou.com">Liu Zhenbang</a>
 */
public interface TypeHandlerRegister<T> {

    /**
     * @return 处理对象的 Class
     */
    Class<T> type();

    /**
     * @return 处理对象的 JdbcType
     */
    JdbcType jdbcType();

    /**
     * @return TypeHandler 实例
     */
    TypeHandler<? extends T> typeHandler();

    /**
     * 执行注册
     *
     * @param registry 注册对象
     */
    default void register(@NonNull TypeHandlerRegistry registry) {
        registry.register(type(), jdbcType(), typeHandler());
    }
}
